package model

import (
	"time"

	"gorm.io/gorm"
)

// BaseModel 基础模型
type BaseModel struct {
	ID        uint           `gorm:"primarykey" json:"id"`
	CreatedAt time.Time      `json:"created_at"`
	UpdatedAt time.Time      `json:"updated_at"`
	DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
}

// Paginate 分页查询参数
type Paginate struct {
	Page     int    `form:"page" json:"page" binding:"required,min=1"`
	PageSize int    `form:"page_size" json:"page_size" binding:"required,min=1,max=100"`
	Order    string `form:"order" json:"order"`
}

// GetOffset 获取偏移量
func (p *Paginate) GetOffset() int {
	return (p.Page - 1) * p.PageSize
}

// GetLimit 获取限制
func (p *Paginate) GetLimit() int {
	return p.PageSize
}

// GetOrder 获取排序
func (p *Paginate) GetOrder() string {
	if p.Order == "" {
		return "id desc"
	}
	return p.Order
}

// Response 通用响应
type Response struct {
	Code int         `json:"code"`
	Msg  string      `json:"msg"`
	Data interface{} `json:"data,omitempty"`
}

// PageResponse 分页响应
type PageResponse struct {
	Code  int         `json:"code"`
	Msg   string      `json:"msg"`
	Data  interface{} `json:"data,omitempty"`
	Total int64       `json:"total"`
	Page  int         `json:"page"`
	Size  int         `json:"size"`
}

// PageResult 分页查询结果
type PageResult struct {
	List  interface{} `json:"list"`
	Total int64       `json:"total"`
}
